﻿using System.Collections.Generic;
using System.ServiceModel;
using Sinacor.Infra.Common.Exceptions.FaultContracts;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Security.Services;

namespace Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.ServiceContract {
    
    /// <summary>
    /// Fgualberto.7comm - 11079
    /// </summary>
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.ServiceContract", SessionMode = SessionMode.Allowed, Name = "IPreBoleto")]
    public interface IPreBoleto
    {
		/// <summary>
		/// Disponibiliza a alteração do Tipo de Casamento, Estratégia e Câmbio de um
		/// determinado pré-boleto
		/// </summary>
		/// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AlterarPreBoleto")]
        void AlterarPreBoleto(DataContract.Request.PreBoletoRequest request);

		/// <summary>
		/// Disponibiliza a alteração do Tipo de Casamento, Estratégia e Câmbio de uma
		/// diversos pré-boleto
		/// </summary>
		/// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AlterarPreBoletos")]
        void AlterarPreBoletos(List<DataContract.Request.PreBoletoRequest> request);

		/// <summary>
		/// Consulta os pré-boletos de uma determinada ordem, para uma determinada data de
		/// pregão
		/// </summary>
		/// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarPreBoletos")]
        List<DataContract.Response.PreBoletoResponse> ConsultarPreBoletos(DataContract.Request.FiltroPreBoletoRequest request);

		/// <summary>
		/// Exclui um determinado pré-boleto
		/// </summary>
		/// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirPreBoleto")]
        void ExcluirPreBoleto(DataContract.Request.FiltroPreBoletoChaveRequest request);

		/// <summary>
		/// Exclui diversos pré-boletos
		/// </summary>
		/// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirPreBoletos")]
        void ExcluirPreBoletos(List<DataContract.Request.FiltroPreBoletoChaveRequest> request);

		/// <summary>
		/// Inclui um pré-boleto para uma determinada ordem do sistema
		/// </summary>
		/// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "IncluirPreBoleto")]
        DataContract.Response.NumeroPreBoletoResponse IncluirPreBoleto(DataContract.Request.PreBoletoRequest request);

		/// <summary>
		/// Inclui uma lista de pré-boletos para diversas ordens do sistema
		/// </summary>
		/// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "IncluirPreBoletos")]
        void IncluirPreBoletos(List<DataContract.Request.PreBoletoRequest> request);
	}
}